import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class OperateService {

  constructor(
    private httpClient: HttpClient
  ) {
  }

  // 查询抽奖配置
  getLottery() {
    return this.httpClient.post('/gamePrize/list', {}).toPromise();
  }

  /**
   * 抽奖配置上下移
   * @param id ID
   * @param moveType 1-上移 0-下移
   */
  moveLottery(id: any, moveType: 1 | 0) {
    return this.httpClient.post('/gamePrize/move', {id, moveType}).toPromise();
  }

  /**
   * 抽奖配置修改
   * id ID
   * name 奖品名
   * probability 概率万分比
   * img 奖品图片
   * type 奖品类型：1-积分、2-点豆、3-实物、4-谢谢惠顾
   * groupType 场次类型：1-初级、2-中级、3-高级
   * limitIntegral 积分解锁条件：0-无需解锁
   * stock 库存（奖品数量） 0表示无限制
   * value 虚拟价值 (积分/爱豆时需要设置)
   */
  modifyLottery(body: any) {
    return this.httpClient.post('/gamePrize/update', body).toPromise();
  }

  /**
   * 奖品记录
   * user 用户
   * prizeGroupType 中奖场次
   * state 状态
   * beginTime 中奖时间
   * endTime 中奖时间
   * grantBeginTime 发放时间
   * grantEndTime 发放时间
   * page 页码
   * pageSize 分页大小
   */
  getPrizeRecordsList(body: any) {
    return this.httpClient.post('/gamePrizeRecord/list', body).toPromise();
  }

  // 导出奖品记录
  exportPrizeRecords(params: any) {
    return this.httpClient.get('/gamePrizeRecord/findExcel', {params, responseType: 'blob', observe: 'response'}).toPromise();
  }

  /**
   * 发放编辑兑换记录
   * id ID
   * expressNum 物流单号
   * expressCode 物流公司编码
   * expressName 物流公司名称
   */
  editExpress(body: any) {
    return this.httpClient.post('/gameOrder/grant', body).toPromise();
  }

  /**
   * 发放编辑奖品记录
   * id ID
   * expressNum 物流单号
   * expressCode 物流公司编码
   * expressName 物流公司名称
   */
  editExpressRecord(body: any) {
    return this.httpClient.post('/gamePrizeRecord/grant', body).toPromise();
  }

  // 导出兑换记录
  exportExchangeRecords(params: any) {
    return this.httpClient.get('/gameOrder/findExcel', {params, responseType: 'blob', observe: 'response'}).toPromise();
  }

  /**
   * 兑换记录
   * user 用户
   * orderNum 订单编号
   * goodsType 礼品类型
   * state 状态
   * beginTime 兑换时间
   * endTime 兑换时间
   * grantBeginTime 发放时间
   * grantEndTime 发放时间
   * page 页码
   * pageSize 分页大小
   */
  getExchangeRecordsList(body: any) {
    return this.httpClient.post('/gameOrder/list', body).toPromise();
  }

  /**
   * 兑换记录
   * goods 商品
   * state 状态 0已删除 1已上架 2已下架
   * beginTime 开始时间
   * endTime 结束时间
   * type 类型 1实物 2虚拟
   * page 页码
   * pageSize 分页大小
   */
  getGoodsList(body: any) {
    return this.httpClient.post('/gameGoods/list', body).toPromise();
  }

  /**
   * 兑换记录
   * @param idList id列表
   * @param isUp 0上架 1下架
   */
  changeGoodsStatus(idList: any, isUp: 0 | 1) {
    return this.httpClient.post('/gameGoods/upOrDownGoods', {idList, isUp}).toPromise();
  }

  /**
   * 添加修改商品
   * id
   * name 商品名称
   * type 商品分类：1-实物、2-虚拟
   * price 商品价格
   * integral 兑换积分
   * stock 库存
   * salesVolumeBase 虚拟叠加兑换数
   * sort 排序
   * icon 商品主图
   * imgs 商品列表图
   * introduction 商品详情图
   */
  addAndModifyGoods(body: any) {
    return this.httpClient.post('/gameGoods/saveOrUpdate', body).toPromise();
  }

  /**
   * 获取活动配置
   */
  getActivityConfig() {
    return this.httpClient.post('/gameActivityConfig/list', {}).toPromise();
  }

  /**
   * 添加或修改活动配置
   */
  editActivityConfig(body: any) {
    return this.httpClient.post('/gameActivityConfig/saveOrUpdate', body).toPromise();
  }

  /**
   * 查看随机兑换码
   */
  getCode(body: any) {
    return this.httpClient.post('/gameCode/list', body).toPromise();
  }

  /**
   * 删除随机兑换码
   */
  deleteCode(body: any) {
    return this.httpClient.post('/gameCode/update', body).toPromise();
  }

}
